<!DOCTYPE html>
<meta charset="UTF-8">
<style>
.container {
  display: inline-block;
}
.parent {
  stroke-dasharray: 30 10;
}
.target {
  font-size: 16px;
  stroke: black;
  stroke-width: 10px;
  stroke-dasharray: 10 30;
}
.expected {
  stroke: green;
}
</style>
<body>
<template id="target-template">
  <svg height="400" width="5">
    <path d="M0,0 l0,400" class="target">
  </svg>
</template>
<script src="resources/interpolation-test.js"></script>
<script>
assertInterpolation({
  property: 'stroke-dasharray',
  from: neutralKeyframe,
  to: '20 20',
}, [
  {at: -0.6, is: '4px, 36px'},
  {at: -0.4, is: '6px, 34px'},
  {at: -0.2, is: '8px, 32px'},
  {at: 0, is: '10px, 30px'},
  {at: 0.2, is: '12px, 28px'},
  {at: 0.4, is: '14px, 26px'},
  {at: 0.6, is: '16px, 24px'},
  {at: 0.8, is: '18px, 22px'},
  {at: 1, is: '20px, 20px'},
  {at: 1.2, is: '22px, 18px'},
]);

assertNoInterpolation({
  property: 'stroke-dasharray',
  from: 'initial',
  to: '20 20',
});

assertInterpolation({
  property: 'stroke-dasharray',
  from: 'inherit',
  to: '20 20',
}, [
  {at: -0.6, is: '36px, 4px'},
  {at: -0.4, is: '34px, 6px'},
  {at: -0.2, is: '32px, 8px'},
  {at: 0, is: '30px, 10px'},
  {at: 0.2, is: '28px, 12px'},
  {at: 0.4, is: '26px, 14px'},
  {at: 0.6, is: '24px, 16px'},
  {at: 0.8, is: '22px, 18px'},
  {at: 1, is: '20px, 20px'},
  {at: 1.2, is: '18px, 22px'},
]);

assertInterpolation({
  property: 'stroke-dasharray',
  from: 'unset',
  to: '20 20',
}, [
  {at: -0.6, is: '36px, 4px'},
  {at: -0.4, is: '34px, 6px'},
  {at: -0.2, is: '32px, 8px'},
  {at: 0, is: '30px, 10px'},
  {at: 0.2, is: '28px, 12px'},
  {at: 0.4, is: '26px, 14px'},
  {at: 0.6, is: '24px, 16px'},
  {at: 0.8, is: '22px, 18px'},
  {at: 1, is: '20px, 20px'},
  {at: 1.2, is: '18px, 22px'},
]);

// Basic case
assertInterpolation({
  property: 'stroke-dasharray',
  from: '5 10',
  to: '15 20'
}, [
  {at: -0.6, is: ' 0  4'}, // Values must be non-negative.
  {at: -0.4, is: ' 1  6'},
  {at: -0.2, is: ' 3  8'},
  {at:  0,   is: ' 5 10'},
  {at:  0.2, is: ' 7 12'},
  {at:  0.4, is: ' 9 14'},
  {at:  0.6, is: '11 16'},
  {at:  0.8, is: '13 18'},
  {at:  1,   is: '15 20'},
  {at:  1.2, is: '17 22'},
]);

// Zero value
assertInterpolation({
  property: 'stroke-dasharray',
  from: '0 0',
  to: '5 10'
}, [
  {at: -0.2, is: ' 0  0'}, // Values must be non-negative.
  {at:  0,   is: ' 0  0'},
  {at:  0.2, is: ' 1  2'},
  {at:  0.4, is: ' 2  4'},
  {at:  0.6, is: ' 3  6'},
  {at:  0.8, is: ' 4  8'},
  {at:  1.0, is: ' 5 10'},
  {at:  1.2, is: ' 6 12'},
]);

// From none
assertNoInterpolation({
  property: 'stroke-dasharray',
  from: 'none',
  to: '5 10'
});

assertNoInterpolation({
  property: 'stroke-dasharray',
  from: 'none',
  to: '5em 10em'
});

// To none
assertNoInterpolation({
  property: 'stroke-dasharray',
  from: '5 10',
  to: 'none'
});

// Both none
assertNoInterpolation({
  property: 'stroke-dasharray',
  from: 'none',
  to: 'none'
});
</script>
</body>
